//统一返回消息格式
package api

import (
	"net/http"
	"woo-server/coms/consts"
	"woo-server/coms/utils"

	"github.com/pquerna/ffjson/ffjson"
)

// 统一返回结构数据
type ResultEntity struct {
	Code          int16       //返回状态码为HTTP标准状态码
	Msg           string      //返回提示信息
	Data          interface{} //返回实际数据：加密JSON串，或是非加密JSON串
	InternalError string      //返回错误信息
}

// 返回加密后的JSON格式数据
func (result *ResultEntity) ToEncryptJson(key []byte) string {
	// jsonStr := utiltools.AesEncrypter([]byte(result.Data), key) //加密数据
	// result.Data = jsonStr
	// result.IsEncrypted = true //加密信息标示位
	return result.ToJson()
}

// 非加密JSON化字符串
func (result *ResultEntity) ToJson() string {
	json, err := ffjson.Marshal(result)
	if err != nil {
		utils.LogError("序列化JSON失败")
		return ""
	}
	return string(json)
}

// 返回操作成功数据：data 序列化JSON
func SuccessToJson(data interface{}, msg string) *ResultEntity {
	Entity := &ResultEntity{
		Code: 0,
		Data: data,
		Msg:  msg,
	}
	return Entity
}

// 返回操作成功数据：msg 成功信息
func Success(msg string) *ResultEntity {
	Entity := &ResultEntity{
		Code: 0,
		Msg:  msg,
	}
	return Entity
}

// 返回操作失败：msg 错误信息
func Error(msg string) *ResultEntity {
	Entity := &ResultEntity{
		Code: -1,
		Msg:  msg,
	}
	return Entity
}

// 参数请求错误
func BadRequestResultEntity(msg string) *ResultEntity {
	Entity := &ResultEntity{
		Code: http.StatusBadRequest,
		Msg:  msg,
	}
	return Entity
}

// 内部处理错误
func InternalErrorResultEntity(err string) *ResultEntity {
	Entity := &ResultEntity{
		Code:          http.StatusInternalServerError,
		Data:          consts.InternalErrorMsg,
		InternalError: err,
	}
	return Entity
}
